<template>
  <div>
    <!-- 还有初始界面/loading界面/error界面 -->
    <h2 v-if="firstView">请输入关键字进行搜索</h2>
    <h2 v-else-if="loading">正在请求中...</h2>
    <h2 v-else-if="errorMsg">{{errorMsg}}</h2>
    <div class="row" v-else>
      <!-- {name, url, avatar_url} -->
      <div class="card" v-for="user in users" :key="user.name">
        <a :href="user.url" target="_blank">
          <img :src="user.avatar_url" style='width: 100px'/>
        </a>
        <p class="card-text">{{ user.name }}</p>
      </div>
    </div>
  </div>
</template>

<script>
import axios from 'axios'
export default {
  name: 'SearchMain',

  data () {
    return {
      // - firstView: true    是否显示初始的提示界面
      // - loading: false  是否正在请求中 => 显示Loading界面
      // - users: [{name, url, avatar_url}]  请求得到用户列表
      // - errorMsg: 请求失败的错误信息
      firstView: true,
      loading: false,
      users: [],
      errorMsg: ''
    }
  },

  mounted () {
    // 给事件总线绑定search事件
    this.$bus.$on('search', async (keyword) => {

      // 更新为请求中
      this.firstView = false
      this.loading = true
      try {
        // 发请求获取用户列表
        const response = await axios.get(`/dev-api/search/users?q=${keyword}`)

        // 读取成功数据中的用户列表
        this.users = response.data.items.map(item => ({
          name: item.login,
          url: item.html_url,
          avatar_url: item.avatar_url
        }))
        this.loading = false
      } catch (error) {
        // 更新为失败
        this.loading = false
        this.errorMsg = '请求失败: ' + error.message
      }
      
    })
  }
}
</script>

<style scoped>
.card {
  float: left;
  width: 33.333%;
  padding: .75rem;
  margin-bottom: 2rem;
  border: 1px solid #efefef;
  text-align: center;
}

.card > img {
  margin-bottom: .75rem;
  border-radius: 100px;
}

.card-text {
  font-size: 85%;
}
</style>
